60806040523480156200001157600080fd5b506040516200594a3803806200594a83398101604081905262000034916200011f565b600462000042838262000218565b50600662000051828262000218565b505050620002e4565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b81604052838152602092508683858801011115620000e757600080fd5b600091505b838210156200010b5785820183015181830184015290820190620000ec565b600093810190920192909252949350505050565b600080604083850312156200013357600080fd5b82516001600160401b03808211156200014b57600080fd5b620001598683870162000070565b935060208501519150808211156200017057600080fd5b506200017f8582860162000070565b9150509250929050565b600181811c908216806200019e57607f821691505b602082108103620001bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021357600081815260208120601f850160051c81016020861015620001ee5750805b601f850160051c820191505b818110156200020f57828155600101620001fa565b5050505b505050565b81516001600160401b038111156200023457620002346200005a565b6200024c8162000245845462000189565b84620001c5565b602080601f8311600181146200028457600084156200026b5750858301515b600019600386901b1c1916600185901b1785556200020f565b600085815260208120601f198616915b82811015620002b55788860151825594840194600190910190840162000294565b5085821015620002d45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61565680620002f46000396000f3fe608060405234801561001057600080fd5b50600436106103a35760003560e01c806382afd23b116101e9578063d0221ee01161010f578063e985e9c5116100ad578063fb2849171161007c578063fb284917146108e7578063fb2aaa4c14610914578063fc3e05a414610927578063fd8a71631461093757600080fd5b8063e985e9c514610885578063f242432a146108b3578063f737401e146108c1578063f8f353b6146108d457600080fd5b8063d80a8434116100e9578063d80a843414610839578063d9fd995b1461084c578063e05209ff1461085f578063e33dd5c91461087257600080fd5b8063d0221ee0146107eb578063d3272ba8146107fe578063d395acf81461081157600080fd5b8063a2be079b11610187578063b052925e11610156578063b052925e14610792578063b56f7562146107a5578063c43dc177146107b8578063cead6304146107cb57600080fd5b8063a2be079b1461071e578063a4a1f06c1461074c578063ac9650d81461075f578063afaae55a1461077f57600080fd5b80639d6ccb9f116101c35780639d6ccb9f146106d75780639fe3b510146106ea578063a22cb465146106fd578063a29e8fa61461070b57600080fd5b806382afd23b146106885780638c0760771461069b5780639aa22f6d146106c457600080fd5b8063499c05e8116102ce578063641f776e1161026c578063756329a41161023b578063756329a41461063c5780637903e56b1461064f5780637a9df89f1461066257806380198fad1461067557600080fd5b8063641f776e146105cc5780636743175a146105df5780637178fb51146105f257806374f82e301461063457600080fd5b806354a1826c116102a857806354a1826c1461054f57806357f607721461056257806359701e44146105a65780635d5eb5af146105b957600080fd5b8063499c05e8146104f45780634e1273f41461051c57806352a6b2651461053c57600080fd5b80631a64dfad11610346578063378a848911610315578063378a8489146104a85780633fa9d544146104bb5780634352409a146104ce57806345fffac8146104e157600080fd5b80631a64dfad1461046157806321dbb8cb146104745780632eb2c2d614610487578063376792b91461049557600080fd5b806306fdde031161038257806306fdde03146104065780630b328e261461041b5780630e89341c1461043b5780631183a8c01461044e57600080fd5b8062fdd58e146103a85780630109f854146103ce57806301ffc9a7146103e3575b600080fd5b6103bb6103b63660046141ef565b61094a565b6040519081526020015b60405180910390f35b6103e16103dc366004614219565b6109a6565b005b6103f66103f1366004614245565b610af1565b60405190151581526020016103c5565b61040e610b8a565b6040516103c591906142d7565b6103bb6104293660046142fe565b60036020526000908152604090205481565b61040e610449366004614319565b610c18565b6103bb61045c366004614319565b610c23565b6103bb61046f36600461437b565b610c76565b6103e16104823660046143fc565b610cdf565b6103e16103a3366004614464565b6103e16104a336600461451f565b610e41565b6103e16104b636600461451f565b610ec4565b6103f66104c9366004614219565b610f75565b6103f66104dc3660046141ef565b611117565b6103f66104ef366004614319565b61112c565b610507610502366004614319565b611169565b60405163ffffffff90911681526020016103c5565b61052f61052a3660046145a9565b611333565b6040516103c59190614615565b6103f661054a3660046145a9565b611434565b6103f661055d3660046141ef565b6114d4565b61058e610570366004614319565b6000908152600760205260409020600101546001600160a01b031690565b6040516001600160a01b0390911681526020016103c5565b6103e16105b4366004614219565b61166e565b6103bb6105c73660046143fc565b611787565b6103f66105da366004614219565b611814565b6103f66105ed366004614319565b6119e1565b610507610600366004614319565b6000908152600760205260409020547801000000000000000000000000000000000000000000000000900463ffffffff1690565b61040e611a69565b6103e161064a366004614319565b611a76565b6103f661065d36600461471f565b611b49565b6103e1610670366004614319565b611cd2565b6103e161068336600461488a565b611d32565b6103f6610696366004614319565b611e57565b61058e6106a9366004614319565b6000908152600760205260409020546001600160a01b031690565b6105076106d2366004614319565b611e6f565b6105076106e53660046142fe565b611e86565b6103f66106f83660046148b4565b611eb6565b6103e16103a33660046148e0565b6103f66107193660046148b4565b611ef3565b6103f661072c366004614219565b600860209081526000928352604080842090915290825290205460ff1681565b6103e161075a36600461490a565b611f4f565b61077261076d366004614946565b612194565b6040516103c59190614988565b6103f661078d366004614a08565b612215565b6103bb6107a0366004614a55565b61227c565b6103f66107b33660046141ef565b612405565b6103f66107c6366004614b16565b61254c565b6103bb6107d93660046142fe565b60026020526000908152604090205481565b6103e16107f93660046148b4565b6125aa565b6103f661080c366004614319565b612628565b61082461081f366004614319565b612687565b6040516103c599989796959493929190614b39565b6103f66108473660046141ef565b6127f5565b6103e161085a366004614bb5565b61280f565b6103bb61086d3660046143fc565b61290a565b61040e610880366004614319565b612939565b6103f6610893366004614c01565b600160209081526000928352604080842090915290825290205460ff1681565b6103e16103a3366004614c1d565b6103e16108cf366004614bb5565b612cd7565b6103bb6108e2366004614c95565b612dd2565b6105076108f5366004614319565b600090815260076020526040902054600160a01b900463ffffffff1690565b610507610922366004614319565b612e4f565b6005546105079063ffffffff1681565b6103f6610945366004614319565b612eae565b60008181526007602052604081206109628184612edd565b8015610974575061097484828561301f565b1561099f576001600160a01b0384166000908152602081815260408083208684529091529020545b91505b5092915050565b6001600160a01b0381166109e6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109ef826131d1565b6000828152600760205260409020610a1f8160010154600160a01b90046b40000000000000000000000016151590565b610a55576040517fbb7790e600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610a62838661321a565b915091508115610a7857610a76858261335a565b505b6001830180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386169081179091556040805187815260208101929092527ff68bc34e5f23b18f8e3a63ff51c021c8fbc9266113a63a4c73a66b4ad9033638910160405180910390a15050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161480610b8457507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60048054610b9790614ccc565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc390614ccc565b8015610c105780601f10610be557610100808354040283529160200191610c10565b820191906000526020600020905b815481529060010190602001808311610bf357829003601f168201915b505050505081565b6060610b84826133d3565b6000818152600760205260408120548190610c63907c0100000000000000000000000000000000000000000000000000000000900461ffff166001614d48565b9050610c6f8382612dd2565b9392505050565b6005805460009160e0918390610c919063ffffffff16614d63565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b9050610ccc818686600160008060008a8a61368e565b610cd686826137de565b95945050505050565b610ce8826131d1565b6000828152600760205260409020610d188160010154600160a01b90046b40000000000000000000000016151590565b610d4e576040517fbb7790e600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805463ffffffff780100000000000000000000000000000000000000000000000090910481169083161015610daf576040517fd2955d3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805463ffffffff838116600160a01b9092041614610e3c5780547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff16600160a01b63ffffffff84169081029190911782556040805185815260208101929092527fb1141d53812d55ffe5a4ca05e686728ebe52d8e4fc66057d6e54724c01a77f5691015b60405180910390a15b505050565b7fffffffff0000000000000000000000000000000000000000000000000000000060e089901b16610e71816131d1565b600e610e7c89612e4f565b63ffffffff161015610ea057610e9b610e96896001612dd2565b6131d1565b610ea9565b610ea98861389a565b610eb989898989898989896138ef565b505050505050505050565b600e610ecf88612e4f565b63ffffffff161015610eee57610ee9610e96886001612dd2565b610ef7565b610ef78761389a565b63ffffffff88166000908152600260205260409020548714610f45576040517fbcb31ea200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff8816600090815260026020526040812055610f6b88888888888888886138ef565b5050505050505050565b6000828152600760205260408082205490516001600160a01b038481166024830152604482018690528392839283928392169060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd683872000000000000000000000000000000000000000000000000000000001790525161100e9190614da2565b600060405180830381855afa9150503d8060008114611049576040519150601f19603f3d011682016040523d82523d6000602084013e61104e565b606091505b5091509150818015611061575080516040145b156110cc576000808280602001905181019061107d9190614dbe565b915091506002821080156110915750600281105b156110cc57806001146110a55760006110a8565b60015b94508480156110b75750816001145b6110c25760006110c5565b60015b95506110fe565b6040517f8bd78b5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505061110c87878686613cd9565b979650505050505050565b600080611124848461094a565b119392505050565b600061113782612eae565b8015610b8457506003600061114b84611e6f565b63ffffffff1681526020810191909152604001600020541592915050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216810361119857506000919050565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff82166000036111c457506001919050565b77ffffffffffffffffffffffffffffffffffffffffffffffff82166000036111ee57506002919050565b75ffffffffffffffffffffffffffffffffffffffffffff821660000361121657506003919050565b6001600160a01b03821660000361122f57506004919050565b71ffffffffffffffffffffffffffffffffffff821660000361125357506005919050565b6fffffffffffffffffffffffffffffffff821660000361127557506006919050565b6dffffffffffffffffffffffffffff821660000361129557506007919050565b6bffffffffffffffffffffffff82166000036112b357506008919050565b69ffffffffffffffffffff82166000036112cf57506009919050565b67ffffffffffffffff82166000036112e95750600a919050565b65ffffffffffff82166000036113015750600b919050565b63ffffffff82166000036113175750600c919050565b61ffff821660000361132b5750600d919050565b50600e919050565b606083821461136e576040517ffc5221bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8367ffffffffffffffff81111561138757611387614659565b6040519080825280602002602001820160405280156113b0578160200160208202803683370190505b50905060005b8481101561142b576114068686838181106113d3576113d3614de2565b90506020020160208101906113e89190614e11565b8585848181106113fa576113fa614de2565b9050602002013561094a565b82828151811061141857611418614de2565b60209081029190910101526001016113b6565b50949350505050565b600083828114611470576040517ffc5221bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156114c7576114be87878381811061149057611490614de2565b905060200201358686848181106114a9576114a9614de2565b90506020020160208101906105da9190614e11565b50600101611473565b5060019695505050505050565b6000818152600760205260408082205490516001600160a01b038581166024830152604482018590528392839291169060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd683872000000000000000000000000000000000000000000000000000000001790525161156a9190614da2565b600060405180830381855afa9150503d80600081146115a5576040519150601f19603f3d011682016040523d82523d6000602084013e6115aa565b606091505b50915091508180156115bd575080516040145b1561163c57600080828060200190518101906115d99190614dbe565b915091506002821080156115ed5750600281105b1561160b5780600114611601576000611604565b60015b9450611635565b60008681526008602090815260408083206001600160a01b038b16845290915290205460ff161594505b5050611666565b60008481526008602090815260408083206001600160a01b038916845290915290205460ff161592505b505092915050565b6001600160a01b0381166116ae576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116b7826131d1565b60008281526007602052604090206116e78160010154600160a01b90046b40000000000000000000000016151590565b61171d576040517fbb7790e600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03831690811782556040805185815260208101929092527f5f59e4feecec6992840f6f7c313415b21889d4445ea82fefd7f620aeb194461d9101610e33565b6000806003600061179786611e6f565b63ffffffff1663ffffffff168152602001908152602001600020549050806000036117ce576117c6848461290a565b915050610b84565b60006117de61092286600061290a565b90508363ffffffff168163ffffffff161161180a576118018561086d8387614e2c565b92505050610b84565b610cd68285611787565b60008281526007602052604081208054600160a01b900463ffffffff168203611871576040517fae231814000000000000000000000000000000000000000000000000000000008152600481018590526024015b60405180910390fd5b61187b83856127f5565b6118b1576040517ff8eb54de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118bb8185612edd565b6118f1576040517fe629aba300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118fa846131d1565b805463ffffffff600160a01b8204811678010000000000000000000000000000000000000000000000009092041610611962576040517f0cd96ab800000000000000000000000000000000000000000000000000000000815260048101859052602401611868565b6001600160a01b038316600090815260208181526040808320878452909152902054156119cd576040517f643d20830000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260248101859052604401611868565b6119d783856137de565b5060019392505050565b60006119ec82612eae565b156119f957506001919050565b6000611a0483611169565b9050600080611a14600184614e2c565b63ffffffff1690505b8015611a5e57611a2e81600e614e49565b611a39906010614e5c565b85901c91508161ffff16600003611a5557506000949350505050565b60001901611a1d565b506001949350505050565b60068054610b9790614ccc565b611a7f816131d1565b6000818152600760205260409020611aaf8160010154600160a01b90046b40000000000000000000000016151590565b611ae5576040517fbb7790e600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001810180546001600160a01b038116600160a01b918290046bbfffffffffffffffffffffff169091021790556040518281527f10bb2a0010ffb3a037a886128a37f6574be73acb0ee505c37a4f12e8d290ed8e9060200160405180910390a15050565b60008b818b82148015611b5b5750818a145b8015611b675750885182145b8015611b735750875182145b8015611b7e57508186145b8015611b8957508184145b905080611bc2576040517ffc5221bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b81811015611cbd57611cb48f8f83818110611be357611be3614de2565b905060200201358e8e84818110611bfc57611bfc614de2565b9050602002810190611c0e9190614e73565b8e8e86818110611c2057611c20614de2565b9050602002016020810190611c3591906142fe565b8d8681518110611c4757611c47614de2565b60200260200101518d8781518110611c6157611c61614de2565b60200260200101518d8d89818110611c7b57611c7b614de2565b9050602002016020810190611c909190614ed8565b8c8c8a818110611ca257611ca2614de2565b90506020028101906107a09190614e73565b50600101611bc6565b5060019e9d5050505050505050505050505050565b3360009081526020818152604080832084845290915290205460011115611d25576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d2f3382613de8565b50565b7fffffffff0000000000000000000000000000000000000000000000000000000060e083901b16611d62816131d1565b6001600160a01b0382161580611d7f5750611d7d8282611117565b155b15611db6576040517fa60d071800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff83166000818152600360209081526040808320839055600282528083208390558483526007825280832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811682556001820180549091169055815194855291840192909252917fd89812e6ebd66026da23b9c10923f8ec2d47c2f4bea260250e66d05ab76f6b8991015b60405180910390a150505050565b6000818152600760205260408120610b849083612edd565b6000611e7d600e6010614e5c565b9190911c919050565b63ffffffff8116600090815260036020526040812054808203611eaa575090919050565b610c6f6106e582611e6f565b600080611ec284611e86565b90506000611ecf84611e6f565b90506000611edc82611e86565b63ffffffff93841693169290921495945050505050565b600081600003611f0557506001610b84565b6000611f1083611e6f565b90508063ffffffff168463ffffffff1603611f2f576000915050610b84565b63ffffffff8116600090815260036020526040902054610cd68582611ef3565b611f58836131d1565b611f618361112c565b611fc257600083815260076020526040902060010154600160a01b90046b40000000000000000000000016611fc2576040517fbb7790e600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000908152602081815260408083208684529091529020546001111561201e576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811660009081526020818152604080832086845290915290205415612089576040517f643d20830000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101849052604401611868565b61209381846127f5565b6120c9576040517ff8eb54de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526007602052604090206120e19084612edd565b612117576040517fe629aba300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038281166000818152602081815260408083208884528252808320839055938516808352828252848320888452825291849020600190819055845188815291820152909233917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4505050565b6060602060005281602052816121aa5760406000f35b60408260051b8085604037818101905b82518601604082018135602083018237600080833583305af46121e1573d6000803e3d6000fd5b8285526020850194503d81523d6000602083013e50503d01603f0167ffffffffffffffe0168183106121ba57604081016000f35b600084815260076020526040812080546001600160a01b03163314612266576040517f8bd78b5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61227286868686613cd9565b9695505050505050565b600061ffff8a16156122ba576040517f7c9225c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166122fa576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661233a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123438a6119e1565b612379576040517fb43a065000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123828a610c23565b905061238d816131d1565b61239e818a8a8a8a8a8a8a8a61368e565b60008a81526007602052604090208054601c906123de907c0100000000000000000000000000000000000000000000000000000000900461ffff16614ef3565b91906101000a81548161ffff021916908361ffff1602179055509998505050505050505050565b600080600061241384612eae565b15612481576003600061242586611e6f565b63ffffffff1663ffffffff16815260200190815260200160002054915081600003612454576118018585611117565b61245e8583611117565b1561246e57600192505050610b84565b61247782611169565b9050819350612499565b600161248c85611169565b6124969190614e2c565b90505b63ffffffff8116156124cc576124b3856104dc868461290a565b156124c357600192505050610b84565b60001901612499565b6124db856104dc86600061290a565b156124eb57600192505050610b84565b600360006124f886611e6f565b63ffffffff1663ffffffff1681526020019081526020016000205491508160000361252857600092505050610b84565b6125328583611117565b1561254257600192505050610b84565b610cd68583612405565b600082815260076020526040812060018101546001600160a01b031633146125a0576040517feaca8b6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61099c848461335a565b7fffffffff0000000000000000000000000000000000000000000000000000000060e083901b166125da816131d1565b63ffffffff8316600081815260026020908152604091829020859055815192835282018490527f81ae7626a9656578e59b92a7575fdbd9cfe59e467c1e88334e305e0b428e76669101610e33565b60008181526007602052604081208180612642838661321a565b915091508161267d576040517feaca8b6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cd6858261335a565b60606000806000806060600080600080600760008c815260200190815260200160002090508060020180546126bb90614ccc565b80601f01602080910402602001604051908101604052809291908181526020018280546126e790614ccc565b80156127345780601f1061270957610100808354040283529160200191612734565b820191906000526020600020905b81548152906001019060200180831161271757829003601f168201915b505084546001860154949e5063ffffffff600160a01b820481169e5078010000000000000000000000000000000000000000000000008204169c506001600160a01b039081169b5093909316985061279192508d91506129399050565b815460018301549196507c0100000000000000000000000000000000000000000000000000000000900461ffff1694506b400000000000000000000000600160a01b90910416151592506127e5818c612edd565b9150509193959799909294969850565b6000818152600760205260408120610c6f9084908461301f565b611b5881111561284b576040517fb11b2ad800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612854836131d1565b600083815260076020526040902061286b8461112c565b6128c7576128918160010154600160a01b90046b40000000000000000000000016151590565b6128c7576040517fbb7790e600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600381016128d6838583614f58565b507f26bb402a5ddddf109a54486ab4d62a69ae00966cbc94c57075787f70bf9cba6c848484604051611e4993929190615044565b60008061291e63ffffffff8416600e614e49565b612929906010614e5c565b600019901b939093169392505050565b6000818152600760205260408120600381018054606093919061295b90614ccc565b80601f016020809104026020016040519081016040528092919081815260200182805461298790614ccc565b80156129d45780601f106129a9576101008083540402835291602001916129d4565b820191906000526020600020905b8154815290600101906020018083116129b757829003601f168201915b505050505090506000815111156129ec579392505050565b60006129f785612e4f565b63ffffffff16905080600003612a9c5760068054612a1490614ccc565b80601f0160208091040260200160405190810160405280929190818152602001828054612a4090614ccc565b8015612a8d5780601f10612a6257610100808354040283529160200191612a8d565b820191906000526020600020905b815481529060010190602001808311612a7057829003601f168201915b50505050509350505050919050565b600080612aaa600184614e49565b90505b8015612b7e57612abd8782611787565b6000818152600760205260409020600381018054919750919350612ae090614ccc565b80601f0160208091040260200160405190810160405280929190818152602001828054612b0c90614ccc565b8015612b595780601f10612b2e57610100808354040283529160200191612b59565b820191906000526020600020905b815481529060010190602001808311612b3c57829003601f168201915b50505050509350600084511115612b7557509195945050505050565b60001901612aad565b50612b8a866000611787565b6000818152600760205260409020600381018054919650919250612bad90614ccc565b80601f0160208091040260200160405190810160405280929190818152602001828054612bd990614ccc565b8015612c265780601f10612bfb57610100808354040283529160200191612c26565b820191906000526020600020905b815481529060010190602001808311612c0957829003601f168201915b50505050509250600083511115612c41575090949350505050565b60068054612c4e90614ccc565b80601f0160208091040260200160405190810160405280929190818152602001828054612c7a90614ccc565b8015612cc75780601f10612c9c57610100808354040283529160200191612cc7565b820191906000526020600020905b815481529060010190602001808311612caa57829003601f168201915b5050505050945050505050919050565b611b58811115612d13576040517fb11b2ad800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612d1c836131d1565b6000838152600760205260409020612d338461112c565b612d8f57612d598160010154600160a01b90046b40000000000000000000000016151590565b612d8f576040517fbb7790e600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028101612d9e838583614f58565b507fb8350431af3841b22f977d0e8fd4be94669ef68e2db1d7f02a731d5d09ed44cc848484604051611e4993929190615044565b60008060005b600e811015612e1c57600019602060108302011c9150848216600003612e1457806001600e03036010028461ffff16901b851792505050610b84565b600101612dd8565b506040517f7c9225c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e5a82611169565b9050600060036000612e6b85611e6f565b63ffffffff16815260208101919091526040016000205490508015612ea857612e9381612e4f565b612e9e83600161505e565b610c6f919061505e565b50919050565b60008082118015610b845750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b600182015460405160248101839052600091829182916001600160a01b03169060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905251612f639190614da2565b600060405180830381855afa9150503d8060008114612f9e576040519150601f19603f3d011682016040523d82523d6000602084013e612fa3565b606091505b5091509150818015612fb6575080516020145b15613007576000612fc68261507b565b90506000819003612fda5760009350613001565b80600103612feb5760019350613001565b600180870154600160a01b9004605f1c16151593505b50611666565b600180860154600160a01b9004605f1c161515610cd6565b81546040516001600160a01b03858116602483015260448201849052600092839283929091169060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd68387200000000000000000000000000000000000000000000000000000000179052516130ac9190614da2565b600060405180830381855afa9150503d80600081146130e7576040519150601f19603f3d011682016040523d82523d6000602084013e6130ec565b606091505b50915091508180156130ff575080516040145b1561319e5760008060008380602001905181019061311d9190614dbe565b915091506002821080156131315750600281105b1561316c5780600114613145576000613148565b60015b92508280156131575750816001145b613162576000613165565b60015b9550613196565b60008781526008602090815260408083206001600160a01b038d16845290915290205460ff161595505b5050506131c8565b60008481526008602090815260408083206001600160a01b038a16845290915290205460ff161592505b50509392505050565b6131db3382612405565b611d2f576040517ff921ec0100000000000000000000000000000000000000000000000000000000815233600482015260248101829052604401611868565b60008060008360405160240161323291815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a00000000000000000000000000000000000000000000000000000000179052600187015490519192506060916001600160a01b03909116906132ae908490614da2565b600060405180830381855afa9150503d80600081146132e9576040519150601f19603f3d011682016040523d82523d6000602084013e6132ee565b606091505b509094509050838015613302575080516020145b1561334c5760008180602001905181019061331d919061509f565b9050806000036133305760009350613346565b806001036133415760019350613346565b600094505b50613351565b600093505b50509250929050565b6000828152600760205260408120600180820154600160a01b9004605f1c16151515158315151461099f5761338f8184613ea4565b6040805185815284151560208201527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b60008181526007602052604081206060916133ed8461112c565b156133f9575082613415565b61341284600161340887612e4f565b6105c79190614e2c565b90505b600061342e61342386611e6f565b63ffffffff16613f16565b61343786613f16565b613442876020613f5a565b604051602001613454939291906150b8565b604051602081830303815290604052905060006134718487612edd565b6134b0576040518060400160405280600881526020017f696e6163746976650000000000000000000000000000000000000000000000008152506134e7565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b8454613514907801000000000000000000000000000000000000000000000000900463ffffffff16613f16565b855461352c90600160a01b900463ffffffff16613f16565b61353586613f16565b613540876020613f5a565b8854613554906001600160a01b0316614028565b60018a015461356b906001600160a01b0316614028565b61358d8b60010154600160a01b90046b40000000000000000000000016151590565b6135cc576040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250613603565b6040518060400160405280600481526020017f74727565000000000000000000000000000000000000000000000000000000008152505b60405160200161361a9897969594939291906151a2565b60405160208183030381529060405290506136648460020161363b88612939565b84846040516020016136509493929190615380565b6040516020818303038152906040526140cb565b6040516020016136749190615573565b604051602081830303815290604052945050505050919050565b6000898152600760205260409020600281016136ab898b83614f58565b5080546001600160a01b038088167fffffffffffffffffffffffff000000000000000000000000000000000000000063ffffffff8b16600160a01b0281167fffffffffffffffff000000000000000000000000000000000000000000000000909416939093171783556001830180549188169190921617905560038101613733838583614f58565b508361374b576b800000000000000000000000613759565b6bc000000000000000000000005b8160010160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055507f4d38ad12136291322128027bb8c3af7db2261be395032c1d26dd0ad20cf294158a8a8a8a8a8a8a8a8a6040516137ca999897969594939291906155b8565b60405180910390a150505050505050505050565b6001600160a01b038216600081815260208181526040808320858452825280832060019081905560078352818420805463ffffffff780100000000000000000000000000000000000000000000000080830482168501909116027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff90911617905581518681529283015233917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a45050565b6138a43382612405565b1580156138b857506138b63382611117565b155b15611d2f576040517fbc3a32ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6138f98888611ef3565b61392f576040517f402128fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88166000908152600360205260409020548015613a2757600060e06139588b611e86565b63ffffffff16901b905061396c3382611117565b6139e5577fffffffff00000000000000000000000000000000000000000000000000000000808a169083168082148015906139a75750828214155b156139de576040517f899c1ba600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050613a25565b6139ef8a8a611eb6565b613a25576040517f899c1ba600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b507fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660008181526007602052604090206001600160a01b03881615613ada5780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891690811782556040805184815260208101929092527f5f59e4feecec6992840f6f7c313415b21889d4445ea82fefd7f620aeb194461d910160405180910390a15b6001600160a01b03871615613b5c576001810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389169081179091556040805184815260208101929092527ff68bc34e5f23b18f8e3a63ff51c021c8fbc9266113a63a4c73a66b4ad9033638910160405180910390a15b848015613beb57611b58811115613b9f576040517fb11b2ad800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028201613bae878983614f58565b507fb8350431af3841b22f977d0e8fd4be94669ef68e2db1d7f02a731d5d09ed44cc838888604051613be293929190615044565b60405180910390a15b50828015613c7b57611b58811115613c2f576040517fb11b2ad800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038201613c3e858783614f58565b507f26bb402a5ddddf109a54486ab4d62a69ae00966cbc94c57075787f70bf9cba6c838686604051613c7293929190615044565b60405180910390a15b63ffffffff8b166000818152600360209081526040918290208d9055815192835282018c90527fd89812e6ebd66026da23b9c10923f8ec2d47c2f4bea260250e66d05ab76f6b89910160405180910390a15050505050505050505050565b6001600160a01b03831660009081526020818152604080832087845290915281205415613d1a57821580613d0b575081155b15613d1a57613d1a8486613de8565b60008581526008602090815260408083206001600160a01b038816845290915290205460ff16151582151503613de0575060008481526008602090815260408083206001600160a01b03871680855290835292819020805485157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116811790915581518881529283019390935291158183015290516001917ff95db9732f1ede51ad19afa6ee380168a1be58df547533ff009c18ceacd01ef5919081900360600190a15b949350505050565b6001600160a01b03821660008181526020818152604080832085845282528083208390556007825280832080547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff811678010000000000000000000000000000000000000000000000009182900463ffffffff9081166000190116909102179055805185815260019281019290925291929133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910161388e565b8015613ee7575060010180546001600160a01b0381166b800000000000000000000000600160a01b928390046bffffffffffffffffffffffff1617909102179055565b5060010180546001600160a01b038116600160a01b918290046b7fffffffffffffffffffffff16909102179055565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480613f305750819003601f19909101908152919050565b60408051601f196062600185901b01811690910191829052600091019081526f30313233343536373839616263646566600f5280835b600f8116517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8401936000190153600f8160041c165183536000199093019260081c83613f90578015613feb57632194895a6000526004601cfd5b50613078601f198301528190036002017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffde90910190815292915050565b60408051606001908190526f30313233343536373839616263646566600f526014825b600f8116517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8401936000190153600f8160041c165183536000199091019060081c8161404b575050613078601f19820152602a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffde909101908152919050565b6060610b84826000806060835180156141cb576003600282010460021b60405192507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526102308515027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f03603f52602083018181015b6003880197508751603f8160121c16518353603f81600c1c16516001840153603f8160061c16516002840153603f81165160038401535060048201915080821061414457600384068680156141a4576001821482151501850387526141bc565b603d821515850353603d6001831460011b8503538487525b5050601f01601f191660405250505b509392505050565b80356001600160a01b03811681146141ea57600080fd5b919050565b6000806040838503121561420257600080fd5b61420b836141d3565b946020939093013593505050565b6000806040838503121561422c57600080fd5b8235915061423c602084016141d3565b90509250929050565b60006020828403121561425757600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610c6f57600080fd5b60005b838110156142a257818101518382015260200161428a565b50506000910152565b600081518084526142c3816020860160208601614287565b601f01601f19169290920160200192915050565b602081526000610c6f60208301846142ab565b803563ffffffff811681146141ea57600080fd5b60006020828403121561431057600080fd5b610c6f826142ea565b60006020828403121561432b57600080fd5b5035919050565b60008083601f84011261434457600080fd5b50813567ffffffffffffffff81111561435c57600080fd5b60208301915083602082850101111561437457600080fd5b9250929050565b60008060008060006060868803121561439357600080fd5b61439c866141d3565b9450602086013567ffffffffffffffff808211156143b957600080fd5b6143c589838a01614332565b909650945060408801359150808211156143de57600080fd5b506143eb88828901614332565b969995985093965092949392505050565b6000806040838503121561440f57600080fd5b8235915061423c602084016142ea565b60008083601f84011261443157600080fd5b50813567ffffffffffffffff81111561444957600080fd5b6020830191508360208260051b850101111561437457600080fd5b60008060008060008060008060a0898b03121561448057600080fd5b614489896141d3565b975061449760208a016141d3565b9650604089013567ffffffffffffffff808211156144b457600080fd5b6144c08c838d0161441f565b909850965060608b01359150808211156144d957600080fd5b6144e58c838d0161441f565b909650945060808b01359150808211156144fe57600080fd5b5061450b8b828c01614332565b999c989b5096995094979396929594505050565b60008060008060008060008060c0898b03121561453b57600080fd5b614544896142ea565b97506020890135965061455960408a016141d3565b955061456760608a016141d3565b9450608089013567ffffffffffffffff8082111561458457600080fd5b6145908c838d01614332565b909650945060a08b01359150808211156144fe57600080fd5b600080600080604085870312156145bf57600080fd5b843567ffffffffffffffff808211156145d757600080fd5b6145e38883890161441f565b909650945060208701359150808211156145fc57600080fd5b506146098782880161441f565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b8181101561464d57835183529284019291840191600101614631565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261469957600080fd5b8135602067ffffffffffffffff808311156146b6576146b6614659565b8260051b604051601f19603f830116810181811084821117156146db576146db614659565b6040529384528581018301938381019250878511156146f957600080fd5b83870191505b8482101561110c57614710826141d3565b835291830191908301906146ff565b60008060008060008060008060008060008060e08d8f03121561474157600080fd5b67ffffffffffffffff8d35111561475757600080fd5b6147648e8e358f0161441f565b909c509a5067ffffffffffffffff60208e0135111561478257600080fd5b6147928e60208f01358f0161441f565b909a50985067ffffffffffffffff60408e013511156147b057600080fd5b6147c08e60408f01358f0161441f565b909850965067ffffffffffffffff60608e013511156147de57600080fd5b6147ee8e60608f01358f01614688565b955067ffffffffffffffff60808e0135111561480957600080fd5b6148198e60808f01358f01614688565b945067ffffffffffffffff60a08e0135111561483457600080fd5b6148448e60a08f01358f0161441f565b909450925067ffffffffffffffff60c08e0135111561486257600080fd5b6148728e60c08f01358f0161441f565b81935080925050509295989b509295989b509295989b565b6000806040838503121561489d57600080fd5b6148a6836142ea565b915061423c602084016141d3565b600080604083850312156148c757600080fd5b61420b836142ea565b803580151581146141ea57600080fd5b600080604083850312156148f357600080fd5b6148fc836141d3565b915061423c602084016148d0565b60008060006060848603121561491f57600080fd5b8335925061492f602085016141d3565b915061493d604085016141d3565b90509250925092565b6000806020838503121561495957600080fd5b823567ffffffffffffffff81111561497057600080fd5b61497c8582860161441f565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156149fb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526149e98583516142ab565b945092850192908501906001016149af565b5092979650505050505050565b60008060008060808587031215614a1e57600080fd5b84359350614a2e602086016141d3565b9250614a3c604086016148d0565b9150614a4a606086016148d0565b905092959194509250565b600080600080600080600080600060e08a8c031215614a7357600080fd5b8935985060208a013567ffffffffffffffff80821115614a9257600080fd5b614a9e8d838e01614332565b909a509850889150614ab260408d016142ea565b9750614ac060608d016141d3565b9650614ace60808d016141d3565b9550614adc60a08d016148d0565b945060c08c0135915080821115614af257600080fd5b50614aff8c828d01614332565b915080935050809150509295985092959850929598565b60008060408385031215614b2957600080fd5b8235915061423c602084016148d0565b6000610120808352614b4d8184018d6142ab565b63ffffffff8c811660208601528b1660408501526001600160a01b038a811660608601528916608085015283810360a08501529050614b8c81886142ab565b61ffff9690961660c0840152505091151560e08301521515610100909101529695505050505050565b600080600060408486031215614bca57600080fd5b83359250602084013567ffffffffffffffff811115614be857600080fd5b614bf486828701614332565b9497909650939450505050565b60008060408385031215614c1457600080fd5b6148a6836141d3565b60008060008060008060a08789031215614c3657600080fd5b614c3f876141d3565b9550614c4d602088016141d3565b94506040870135935060608701359250608087013567ffffffffffffffff811115614c7757600080fd5b614c8389828a01614332565b979a9699509497509295939492505050565b60008060408385031215614ca857600080fd5b82359150602083013561ffff81168114614cc157600080fd5b809150509250929050565b600181811c90821680614ce057607f821691505b602082108103612ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61ffff81811683821601908082111561099f5761099f614d19565b600063ffffffff808316818103614d7c57614d7c614d19565b6001019392505050565b60008151614d98818560208601614287565b9290920192915050565b60008251614db4818460208701614287565b9190910192915050565b60008060408385031215614dd157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215614e2357600080fd5b610c6f826141d3565b63ffffffff82811682821603908082111561099f5761099f614d19565b81810381811115610b8457610b84614d19565b8082028115828204841417610b8457610b84614d19565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ea857600080fd5b83018035915067ffffffffffffffff821115614ec357600080fd5b60200191503681900382131561437457600080fd5b600060208284031215614eea57600080fd5b610c6f826148d0565b600061ffff808316818103614d7c57614d7c614d19565b601f821115610e3c57600081815260208120601f850160051c81016020861015614f315750805b601f850160051c820191505b81811015614f5057828155600101614f3d565b505050505050565b67ffffffffffffffff831115614f7057614f70614659565b614f8483614f7e8354614ccc565b83614f0a565b6000601f841160018114614fb85760008515614fa05750838201355b600019600387901b1c1916600186901b178355615012565b600083815260209020601f19861690835b82811015614fe95786850135825560209485019460019092019101614fc9565b50868210156150065760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b838152604060208201526000610cd6604083018486615019565b63ffffffff81811683821601908082111561099f5761099f614d19565b80516020808301519190811015612ea85760001960209190910360031b1b16919050565b6000602082840312156150b157600080fd5b5051919050565b7f22646f6d61696e223a20220000000000000000000000000000000000000000008152600084516150f081600b850160208901614287565b7f222c20226964223a202200000000000000000000000000000000000000000000600b91840191820152845161512d816015840160208901614287565b7f222c2022707265747479206964223a202200000000000000000000000000000060159290910191820152835161516b816026840160208801614287565b7f222c0000000000000000000000000000000000000000000000000000000000006026929091019182015260280195945050505050565b7f22737461747573223a20220000000000000000000000000000000000000000008152600089516151da81600b850160208e01614287565b7f222c202263757272656e7420737570706c79223a202200000000000000000000600b918401918201528951615217816021840160208e01614287565b01615244602182017f222c2022737570706c7920636170223a202200000000000000000000000000009052565b615251603382018a614d86565b7f222c202261646d696e2028696429223a20220000000000000000000000000000815290506152836012820189614d86565b7f222c202261646d696e202870726574747920696429223a202200000000000000815290506152b56019820188614d86565b7f222c2022656c69676962696c697479206d6f64756c65223a2022000000000000815290506152e7601a820187614d86565b7f222c2022746f67676c65206d6f64756c65223a20220000000000000000000000815290506153196015820186614d86565b7f222c20226d757461626c65223a202200000000000000000000000000000000008152905061534b600f820185614d86565b7f220000000000000000000000000000000000000000000000000000000000000081526001019b9a5050505050505050505050565b7f7b226e616d65223a20220000000000000000000000000000000000000000000081527f4861740000000000000000000000000000000000000000000000000000000000600a8201527f222c20226465736372697074696f6e223a202200000000000000000000000000600d820152600060206000875461540081614ccc565b60018281168015615418576001811461544f5761547f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841686890152858315158402890101945061547f565b8b6000528560002060005b848110156154755781548a820189015290830190870161545a565b5050858389010194505b507f222c2022696d616765223a20220000000000000000000000000000000000000084526154b0600d85018b614d86565b7f222c000000000000000000000000000000000000000000000000000000000000815294507f2270726f70657274696573223a2000000000000000000000000000000000000060028601527f7b000000000000000000000000000000000000000000000000000000000000006010860152615537615531601187018b614d86565b89614d86565b7f7d00000000000000000000000000000000000000000000000000000000000000808252918101919091526002019a9950505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152600082516155ab81601d850160208701614287565b91909101601d0192915050565b89815260e0602082015260006155d260e083018a8c615019565b63ffffffff891660408401526001600160a01b0388811660608501528716608084015285151560a084015282810360c0840152615610818587615019565b9c9b50505050505050505050505056fea26469706673582212203620611cb556a5437bbe468fe951b4a09dced80631c01465ad1b2a933f77eb6e64736f6c63430008110033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000010486174732050726f746f636f6c207631000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042697066733a2f2f6261666b726569666c657a706b336b6a7a367a737632337062766f777461746e6435686d71666b64726f333378356d6832617a6c686e6533616834000000000000000000000000000000000000000000000000000000000000