0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61523a80620000f46000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c806366d003ac11610145578063a5900c4d116100bd578063d09edf311161008c578063d45a76cf11610071578063d45a76cf14610676578063e6b5be9814610689578063f9eaee0d1461069c57600080fd5b8063d09edf311461064a578063d3feb6021461066357600080fd5b8063a5900c4d146105af578063b187bd2614610609578063c267621e14610626578063c565d9711461063757600080fd5b80638456cb5911610114578063a0c3774f116100f9578063a0c3774f14610556578063a2a5412814610569578063a33741771461057c57600080fd5b80638456cb591461053b57806390333ba81461054357600080fd5b806366d003ac146104b65780636aacaad8146104c95780637125590a1461051557806383f3084f1461052857600080fd5b80633bd9ef28116101d85780634a45a3a8116101a757806351a424b11161018c57806351a424b1146104375780635670e2ce1461046f5780635ea54eee1461048a57600080fd5b80634a45a3a8146103d75780634fd49efd1461040c57600080fd5b80633bd9ef281461038f5780633f4ba83a146103a2578063423a4b40146103aa57806342d4693e146103bd57600080fd5b8063221a8c6811610214578063221a8c68146102b25780632384c32d1461035657806330eae572146103695780633bbed4a01461037c57600080fd5b80630fe105e81461024657806310188aef1461025b578063119a5e961461026e578063219723841461029f575b600080fd5b6102596102543660046144d7565b6106af565b005b610259610269366004614525565b610700565b610276610745565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b6102596102ad3660046146d5565b61077c565b6103246102c0366004614525565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610296565b610259610364366004614799565b610844565b6102596103773660046147ee565b61088b565b61025961038a366004614525565b6108e0565b61025961039d366004614809565b610921565b610259610ab8565b6102596103b8366004614799565b610b75565b600f546103ca9060ff1681565b6040516102969190614864565b6103fe7f779b9d7b1cefd23059ce3e2b194efb3183a6685dd830e8cbb723b0cbeb982b2881565b604051908152602001610296565b60015461041f906001600160a01b031681565b6040516001600160a01b039091168152602001610296565b61044a610445366004614525565b610bbc565b604080516001600160a01b039094168452602084019290925290820152606001610296565b60025460035460408051928352602083019190915201610296565b600654600754600854600954604080519485526020850193909352918301526060820152608001610296565b601c5461041f906001600160a01b031681565b6103246040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b6102596105233660046148a5565b610be5565b601d5461041f906001600160a01b031681565b610259610c28565b6102596105513660046148c7565b610ce9565b6103fe610564366004614525565b610d2e565b610259610577366004614c52565b610dc5565b61044a604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61044a6105bd366004614525565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b6004546106169060ff1681565b6040519015158152602001610296565b6001546001600160a01b031661041f565b610259610645366004614ca4565b610f46565b60005461041f906201000090046001600160a01b031681565b6102596106713660046148c7565b610f78565b610324610684366004614525565b610fbd565b610259610697366004614cd9565b61102c565b6106166106aa366004614525565b611073565b6106be8460ff168484846110be565b6106ed336000357fffffffff000000000000000000000000000000000000000000000000000000001683611169565b6106f9858585856111b0565b5050505050565b61070981611577565b610738336000357fffffffff000000000000000000000000000000000000000000000000000000001683611169565b6107418261158b565b5050565b600a5460009081908190819060ff16600281111561076557610765614835565b600b54600c54600e54935093509350935090919293565b6107aa336000357fffffffff000000000000000000000000000000000000000000000000000000001661162d565b80518251146107e5576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b825181101561083f5761082d83828151811061080657610806614d0b565b602002602001015183838151811061082057610820614d0b565b6020026020010151611649565b8061083781614d69565b9150506107e8565b505050565b610850848484846116f3565b61087f336000357fffffffff000000000000000000000000000000000000000000000000000000001683611169565b6106f98585858561175c565b6108a88160018111156108a0576108a0614835565b60ff16611815565b6108d7336000357fffffffff000000000000000000000000000000000000000000000000000000001683611169565b6107418261185c565b6108e981611577565b610918336000357fffffffff000000000000000000000000000000000000000000000000000000001683611169565b610741826118d7565b61092b82826119cc565b61095a336000357fffffffff000000000000000000000000000000000000000000000000000000001683611169565b8160000361096e5761096b83610d2e565b91505b6109788383611a3b565b601c54604080516001600160a01b0386811660248301529283166044820152606480820186905282518083039091018152608490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167feafaddfd00000000000000000000000000000000000000000000000000000000179052600154601d5492517f1cff79cd000000000000000000000000000000000000000000000000000000008152919390811692631cff79cd92610a429291909116908590600401614e0f565b6000604051808303816000875af1158015610a61573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610aa79190810190614e31565b50610ab28484611abf565b50505050565b610ae6336000357fffffffff000000000000000000000000000000000000000000000000000000001661162d565b60045460ff16610b22576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610b81848484846116f3565b610bb0336000357fffffffff000000000000000000000000000000000000000000000000000000001683611169565b6106f985858585611ac9565b600080600080610bcb85611b89565b805160208201516040909201519097919650945092505050565b610bef8282611c14565b610c1e336000357fffffffff000000000000000000000000000000000000000000000000000000001683611169565b61083f8383611c6e565b610c56336000357fffffffff000000000000000000000000000000000000000000000000000000001661162d565b60045460ff1615610c93576040517fc0f2312800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610cf4838383611cb3565b610d23336000357fffffffff000000000000000000000000000000000000000000000000000000001683611169565b610ab2848484611d45565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015610d9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbf9190614ee3565b92915050565b600054610100900460ff1615808015610de55750600054600160ff909116105b80610dff5750303b158015610dff575060005460ff166001145b610e765760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610ed457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610ede8383611d9b565b801561083f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a1505050565b6040517f8d0ee58400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f83838383611cb3565b610fb2336000357fffffffff000000000000000000000000000000000000000000000000000000001683611169565b610ab2848484611e19565b600080600080600080610fcf87611e6d565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b611038848484846110be565b611067336000357fffffffff000000000000000000000000000000000000000000000000000000001683611169565b6106f985858585611ea1565b6001600160a01b038116600090815260116020526040812054600f549015159060019060ff16818111156110a9576110a9614835565b146110b55780156110b7565b805b9392505050565b60408051600480825260a082019092526060916020820160808036833701905050905084816000815181106110f5576110f5614d0b565b602002602001018181525050838160018151811061111557611115614d0b565b602002602001018181525050828160028151811061113557611135614d0b565b602002602001018181525050818160038151811061115557611155614d0b565b602002602001018181525050949350505050565b611174838383611f3c565b61083f578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610e6d93929190614f37565b60ff84166112ac5760008111806111c75750600082115b156112a75782600003611212576040517fbea499cb00000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101849052604401610e6d565b80158061121e57508281115b15611261576040517f9e12fccf00000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101829052604401610e6d565b816000036112a7576040517fad0d7eb200000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101839052604401610e6d565b6114c2565b826000036112f2576040517fbea499cb00000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101849052604401610e6d565b80158061130a57506113076224ea0084614f81565b81115b1561134d576040517f9e12fccf00000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101829052604401610e6d565b81600003611393576040517fad0d7eb200000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101839052604401610e6d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff85160161140c57601c6113c883611fda565b11156112a7576040517fad0d7eb200000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101839052604401610e6d565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff85160161148b5761143f82611ff1565b61144883611fda565b146112a7576040517fad0d7eb200000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101839052604401610e6d565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610e6d565b8360ff1660028111156114d7576114d7614835565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600183600281111561151157611511614835565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6060610dbf826001600160a01b0316611815565b6001600160a01b0381166115cb576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b6040805160008152602081019091526107419083908390611169565b6001600160a01b038216611689576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061169e57611699601083612014565b6116a9565b6116a9601083612029565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c826040516116e7911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b03168160008151811061173357611733614d0b565b602002602001018181525050836001600160a01b03168160018151811061111557611115614d0b565b6001600160a01b03841661179c576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526015602052604090206117c09084848461203e565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b60408051600180825281830190925260609160208083019080368337019050509050818160008151811061184b5761184b614d0b565b602002602001018181525050919050565b600f80548291907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001838181111561189857611898614835565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a816040516118cc9190614864565b60405180910390a150565b6001600160a01b038116611917576040517f2586ae9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546001600160a01b039081169082160361196a576040517f2941c82e0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610e6d565b601c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f9d900d71c28433348acb1bec780a061608a96b149370abce77fd54ba2d47940190600090a250565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611a0957611a09614d0b565b6020026020010181815250508181600181518110611a2957611a29614d0b565b60200260200101818152505092915050565b611a458282612126565b6001600160a01b038216611a85576040517fc0e0f12200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600003610741576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610741828261216c565b6001600160a01b038416611b09576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b60205260409020611b2d90848484612194565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611b7b929190918252602082015260400190565b60405180910390a350505050565b611bb6604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611bdf5780611be2565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611c4b57611c4b614d0b565b6020026020010181815250508160001c81600181518110611a2957611a29614d0b565b8015611ca9576040517f9842f26f00000000000000000000000000000000000000000000000000000000815260048101829052602401610e6d565b610741828261230b565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611cf257611cf2614d0b565b6020026020010181815250508281600181518110611d1257611d12614d0b565b6020026020010181815250508181600281518110611d3257611d32614d0b565b6020026020010181815250509392505050565b611d526016848484612194565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b600054610100900460ff16611e065760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b611e0f8261238e565b6107418282612412565b611e26601284848461203e565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d34590606001610f39565b6001600160a01b038082166000908152601b602052604081208054919290911615611e9857806110b7565b60169392505050565b670de0b6b3a7640000811115611ee3576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d69190608001611569565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b031690632852289590611f91908790309088908890600401614f98565b602060405180830381865afa158015611fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd29190614ff6565b949350505050565b6000611fd2611fec6201518084615042565b612486565b60008080612005611fec6201518086615042565b5091509150611fd28282612540565b60006110b7836001600160a01b0384166125c6565b60006110b7836001600160a01b0384166126c0565b60006001600160a01b038416158015612055575082155b801561205f575081155b905060006001600160a01b0385161580159061208357508215806120835750838310155b905081158015612091575080155b156120e1576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610e6d565b505083547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03939093169290921783556001830155600290910155565b612130828261270f565b61213a8282612719565b6121448282612756565b61214e828261284a565b6121588282612a9d565b6121628282612ae7565b6107418282612bd4565b6121768282612cea565b6121808282612d8c565b61218a8282612dae565b6107418282612ff8565b60006001600160a01b0384161580156121ab575082155b80156121b5575081155b905060006001600160a01b038516158015906121d15750600084115b80156121dd5750600083115b9050811580156121eb575080155b1561223b576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610e6d565b600386018390556001860184905581156122625760006002870181905560048701556122ce565b8560040154600003612289576000600287015561227f8342615056565b60048701556122ce565b85546001600160a01b038681169116146122ce5785546000906122b5906001600160a01b031687613025565b60028801549091506122c79082613031565b6002880155505b505083547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0393909316929092179092555050565b808214801561231957508115155b15612353576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610e6d565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b600054610100900460ff166123f95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b61240681602001516130a7565b61240f8161316f565b50565b600054610100900460ff1661247d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b6107418161158b565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816124e3576124e3615013565b0590506000605061098f83020585039050600b82057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf94909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806125515750816003145b8061255c5750816005145b806125675750816007145b806125725750816008145b8061257d575081600a145b80612588575081600c145b156125955750601f610dbf565b816002146125a55750601e610dbf565b6125ae836131e5565b6125b957601c6125bc565b601d5b60ff169392505050565b600081815260018301602052604081205480156126af5760006125ea600183615069565b85549091506000906125fe90600190615069565b905081811461266357600086600001828154811061261e5761261e614d0b565b906000526020600020015490508087600001848154811061264157612641614d0b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806126745761267461507c565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610dbf565b6000915050610dbf565b5092915050565b600081815260018301602052604081205461270757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610dbf565b506000610dbf565b6107418282613221565b60045460ff1615610741576040517fc0f2312800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5a600555604080516080810182526006548082526007546020830152600854928201929092526009546060820152906000901580612795575081513a11155b9050806127da5781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610e6d565b602082015115610ab25760006127f0483a615069565b6020840151909150811115806128425760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610e6d918491600401918252602082015260400190565b505050505050565b600a54600b54600c54600e5460ff909316924282111561289f576040517f013ce60b00000000000000000000000000000000000000000000000000000000815242600482015260248101839052604401610e6d565b60008460028111156128b3576128b3614835565b0361298557826000036128c857505050505050565b806000036128e2576128da8342615056565b600d55612842565b60006128ee8342615069565b905060006128fc8583615042565b9050600061290a8683614f81565b6129149084615069565b905083811115612959576040517f013ce60b00000000000000000000000000000000000000000000000000000000815242600482015260248101869052604401610e6d565b85612965836001615056565b61296f9190614f81565b6129799086615056565b600d5550612842915050565b81421015801561299e575061299a8183615056565b4211155b156129ad576128da82846132b6565b600060018560028111156129c3576129c3614835565b146129d6576129d142611ff1565b6129df565b6129df83611fda565b905060006129ed848361334e565b905080421015612a32576040517f013ce60b00000000000000000000000000000000000000000000000000000000815242600482015260248101829052604401610e6d565b6000612a3e8483615056565b90504281108015612a84576040517f013ce60b00000000000000000000000000000000000000000000000000000000815242600482015260248101839052604401610e6d565b612a8e83886132b6565b600d5550505050505050505050565b612aa682611073565b610741576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610e6d565b6000612af283611b89565b80519091506001600160a01b0316612b0957505050565b6000836001600160a01b031682600001516001600160a01b031614612b4557612b40612b39858460000151613025565b8490613031565b612b47565b825b9050600082602001518210158015612b6f575060408301511580612b6f575082604001518211155b9050806106f9578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610e6d565b6000612bdf83611e6d565b6040805160a08101825282546001600160a01b031680825260018401546020830152600284015492820192909252600383015460608201526004909201546080830152909150612c2e57505050565b6000836001600160a01b031682600001516001600160a01b031614612c6357612c5e612b39858460000151613025565b612c65565b825b9050600082608001514210612c7b576000612c81565b82604001515b612c8b9083615056565b905082602001518111156106f957825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610e6d565b6000612cf583611e6d565b80549091506001600160a01b0316612d0c57505050565b80546000906001600160a01b03858116911614612d42578154612d3d90612b399086906001600160a01b0316613025565b612d44565b825b905081600401544210612d6d57600060028301556003820154612d679042615056565b60048301555b80826002016000828254612d819190615056565b909155505050505050565b600d54600003612d9a575050565b612da5600d54613376565b50506000600d55565b600554600003612dea576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a600554612e239190615069565b90506000612e313a83614f81565b90506000836040015160001480612e4c575083604001518211155b905080612e96578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610e6d929190918252602082015260400190565b6000600555606084015115801590612eae5750600085115b15612842576000612f81306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1a91906150ab565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7b91906150ab565b88613025565b90506000612f8f84836133ab565b90506000612f9d8289613454565b90508660600151811115612fed5760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610e6d918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b60006110b7838361351d565b6000828202831580159061305457508284828161305057613050615013565b0414155b15613095576040517fe8e4a4fa0000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604401610e6d565b670de0b6b3a764000090049392505050565b600054610100900460ff166131125760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b805161311d9061372b565b61312561380d565b6131328160200151613882565b61313f81604001516138f6565b61314c816060015161396a565b61315981608001516139de565b6131668160a00151613a52565b61240f81613ac6565b600054610100900460ff166131da5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b805161240f906118d7565b60006131f26004836150c8565b15801561320857506132056064836150c8565b15155b80610dbf575061321a610190836150c8565b1592915050565b60025415610741576001546002546040517feb056bbb00000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401600060405180830381600087803b1580156132a257600080fd5b505af1158015612842573d6000803e3d6000fd5b6000806000806132c586613b31565b9194509250905060006132d88684615056565b905060006132e7600c836150c8565b905060006132f6600c84615042565b6133009087615056565b905060006002600a5460ff16600281111561331d5761331d614835565b146133285784613332565b6133328284612540565b90506133408a838584613b50565b9a9950505050505050505050565b600080600061335c42613b31565b509150915061336d85838387613b50565b95945050505050565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad064906020016118cc565b600082820283158015906133ce5750828482816133ca576133ca615013565b0414155b1561340f576040517fe8e4a4fa0000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604401610e6d565b801561344a57670de0b6b3a76400007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820104600101611fd2565b6000949350505050565b600081600003613490576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036134a057506000610dbf565b670de0b6b3a7640000838102908482816134bc576134bc615013565b04146134fe576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610e6d565b82600182038161351057613510615013565b0460010191505092915050565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613573573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061359791906150ab565b90506001600160a01b0381166135e8576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610e6d565b60006135f2613b78565b9050805160001461368357816001600160a01b031663355efdd961361587613bf8565b61361e87613bf8565b846040518463ffffffff1660e01b815260040161363d939291906150dc565b602060405180830381865afa15801561365a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061367e9190614ee3565b61336d565b816001600160a01b031663ac41865a61369b87613bf8565b6136a487613bf8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061336d9190614ee3565b600054610100900460ff166137965760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b61380481600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137ff91906150ab565b613c2c565b61240f81613ca0565b600054610100900460ff166138785760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b613880613d58565b565b600054610100900460ff166138ed5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b61240f81613dc3565b600054610100900460ff166139615760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b61240f81613e4a565b600054610100900460ff166139d55760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b61240f81613ed1565b600054610100900460ff16613a495760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b61240f81613f91565b600054610100900460ff16613abd5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b61240f81614081565b600054610100900460ff1661240f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b60008080613b43620151808504612486565b9196909550909350915050565b600061336d848484613b6189614171565b613b6a8a61418f565b613b738b6141ab565b6141b8565b60606000613b84614214565b905036811115613ba257505060408051600081526020810190915290565b8067ffffffffffffffff811115613bbb57613bbb614542565b6040519080825280601f01601f191660200182016040528015613be5576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03831614613c245781610dbf565b610dbf61424d565b600054610100900460ff16613c975760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b61240f816142d9565b600054610100900460ff16613d0b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b8051600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039092169190911790556020810151604082015161240f9190611c6e565b600054610100900460ff166138805760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b600054610100900460ff16613e2e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b61240f8160000151826020015183604001518460600151611ea1565b600054610100900460ff16613eb55760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b61240f81600001518260200151836040015184606001516111b0565b600054610100900460ff16613f3c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b8051613f479061185c565b60005b81602001515181101561074157613f7f82602001518281518110613f7057613f70614d0b565b60200260200101516001611649565b80613f8981614d69565b915050613f4a565b600054610100900460ff16613ffc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b8051805160208201516040830151614015929190611e19565b60005b82602001515181101561083f5760008360200151828151811061403d5761403d614d0b565b6020026020010151905060008160200151905061406c826000015182600001518360200151846040015161175c565b5050808061407990614d69565b915050614018565b600054610100900460ff166140ec5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b8051805160208201516040830151614105929190611d45565b60005b82602001515181101561083f5760008360200151828151811061412d5761412d614d0b565b6020026020010151905060008160200151905061415c8260000151826000015183602001518460400151611ac9565b5050808061416990614d69565b915050614108565b60008061418162015180846150c8565b90506110b7610e1082615042565b60008061419e610e10846150c8565b90506110b7603c82615042565b6000610dbf603c836150c8565b6000816141c6603c85614f81565b6141d2610e1087614f81565b620151806141e18b8b8b614384565b6141eb9190614f81565b6141f59190615056565b6141ff9190615056565b6142099190615056565b979650505050505050565b600060243610156142255750600090565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe036013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa1580156142b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142d491906150ab565b905090565b600054610100900460ff166143445760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610e6d565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60006107b284101561439557600080fd5b838383600062253d8c60046064600c6143af600e88615108565b6143b99190615128565b6143c588611324615190565b6143cf9190615190565b6143d99190615128565b6143e49060036151b8565b6143ee9190615128565b600c806143fc600e88615108565b6144069190615128565b61441190600c6151b8565b61441c600288615108565b6144269190615108565b6144329061016f6151b8565b61443c9190615128565b6004600c61444b600e89615108565b6144559190615128565b614461896112c0615190565b61446b9190615190565b614477906105b56151b8565b6144819190615128565b61448d617d4b87615108565b6144979190615190565b6144a19190615190565b6144ab9190615108565b6144b59190615108565b98975050505050505050565b803560ff811681146144d257600080fd5b919050565b600080600080608085870312156144ed57600080fd5b6144f6856144c1565b966020860135965060408601359560600135945092505050565b6001600160a01b038116811461240f57600080fd5b60006020828403121561453757600080fd5b81356110b781614510565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561459457614594614542565b60405290565b6040805190810167ffffffffffffffff8111828210171561459457614594614542565b60405160c0810167ffffffffffffffff8111828210171561459457614594614542565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561462757614627614542565b604052919050565b600067ffffffffffffffff82111561464957614649614542565b5060051b60200190565b600082601f83011261466457600080fd5b813560206146796146748361462f565b6145e0565b82815260059290921b8401810191818101908684111561469857600080fd5b8286015b848110156146bc5780356146af81614510565b835291830191830161469c565b509695505050505050565b801515811461240f57600080fd5b600080604083850312156146e857600080fd5b823567ffffffffffffffff8082111561470057600080fd5b61470c86838701614653565b935060209150818501358181111561472357600080fd5b85019050601f8101861361473657600080fd5b80356147446146748261462f565b81815260059190911b8201830190838101908883111561476357600080fd5b928401925b8284101561478a57833561477b816146c7565b82529284019290840190614768565b80955050505050509250929050565b600080600080608085870312156147af57600080fd5b84356147ba81614510565b935060208501356147ca81614510565b93969395505050506040820135916060013590565b8035600281106144d257600080fd5b60006020828403121561480057600080fd5b6110b7826147df565b6000806040838503121561481c57600080fd5b823561482781614510565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016002831061489f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600080604083850312156148b857600080fd5b50508035926020909101359150565b6000806000606084860312156148dc57600080fd5b83356148e781614510565b95602085013595506040909401359392505050565b60006060828403121561490e57600080fd5b6040516060810181811067ffffffffffffffff8211171561493157614931614542565b604052905080823561494281614510565b8082525060208301356020820152604083013560408201525092915050565b60006080828403121561497357600080fd5b61497b614571565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b6000608082840312156149b757600080fd5b6149bf614571565b90506149ca826144c1565b815260208201356020820152604082013560408201526060820135606082015292915050565b600060408284031215614a0257600080fd5b614a0a61459a565b9050614a15826147df565b8152602082013567ffffffffffffffff811115614a3157600080fd5b614a3d84828501614653565b60208301525092915050565b600060808284031215614a5b57600080fd5b614a6361459a565b90508135614a7081614510565b8152614a7f83602084016148fc565b602082015292915050565b60006080808385031215614a9d57600080fd5b614aa561459a565b9150614ab184846148fc565b8252606083013567ffffffffffffffff811115614acd57600080fd5b8301601f81018513614ade57600080fd5b80356020614aee6146748361462f565b82815260079290921b83018101918181019088841115614b0d57600080fd5b938201935b83851015614b3357614b248986614a49565b82529385019390820190614b12565b808388015250505050505092915050565b600060408284031215614b5657600080fd5b614b5e61459a565b90508135614b6b81614510565b8152602082013567ffffffffffffffff80821115614b8857600080fd5b908301906101c08286031215614b9d57600080fd5b614ba56145bd565b614baf86846148fc565b8152614bbe8660608501614961565b6020820152614bd08660e085016149a5565b604082015261016083013582811115614be857600080fd5b614bf4878286016149f0565b60608301525061018083013582811115614c0d57600080fd5b614c1987828601614a8a565b6080830152506101a083013582811115614c3257600080fd5b614c3e87828601614a8a565b60a083015250602084015250909392505050565b60008060408385031215614c6557600080fd5b823567ffffffffffffffff811115614c7c57600080fd5b614c8885828601614b44565b9250506020830135614c9981614510565b809150509250929050565b600060208284031215614cb657600080fd5b813567ffffffffffffffff811115614ccd57600080fd5b611fd284828501614b44565b60008060008060808587031215614cef57600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d9a57614d9a614d3a565b5060010190565b60005b83811015614dbc578181015183820152602001614da4565b50506000910152565b60008151808452614ddd816020860160208601614da1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6001600160a01b0383168152604060208201526000611fd26040830184614dc5565b600060208284031215614e4357600080fd5b815167ffffffffffffffff80821115614e5b57600080fd5b818401915084601f830112614e6f57600080fd5b815181811115614e8157614e81614542565b614eb260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016145e0565b9150808252856020828501011115614ec957600080fd5b614eda816020840160208601614da1565b50949350505050565b600060208284031215614ef557600080fd5b5051919050565b600081518084526020808501945080840160005b83811015614f2c57815187529582019590820190600101614f10565b509495945050505050565b6001600160a01b03841681527fffffffff000000000000000000000000000000000000000000000000000000008316602082015260606040820152600061336d6060830184614efc565b8082028115828204841417610dbf57610dbf614d3a565b60006001600160a01b0380871683528086166020840152507fffffffff000000000000000000000000000000000000000000000000000000008416604083015260806060830152614fec6080830184614efc565b9695505050505050565b60006020828403121561500857600080fd5b81516110b7816146c7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261505157615051615013565b500490565b80820180821115610dbf57610dbf614d3a565b81810381811115610dbf57610dbf614d3a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000602082840312156150bd57600080fd5b81516110b781614510565b6000826150d7576150d7615013565b500690565b60006001600160a01b0380861683528085166020840152506060604083015261336d6060830184614dc5565b81810360008312801583831316838312821617156126b9576126b9614d3a565b60008261513757615137615013565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561518b5761518b614d3a565b500590565b80820182811260008312801582168215821617156151b0576151b0614d3a565b505092915050565b808202600082127f8000000000000000000000000000000000000000000000000000000000000000841416156151f0576151f0614d3a565b8181058314821517610dbf57610dbf614d3a56fea2646970667358221220ee18cb68ca17228074b2b09ab9e40b0644e333914fe2083c3613c6dccfc9499164736f6c63430008110033